package com.gqj.meter.mapper;

import com.gqj.meter.domain.MdStockPosInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 储位信息Mapper接口
 *
 * @author lxq
 * @date lxq-01-09
 */
public interface MdStockPosInfoMapper {
    /**
     * 查询储位信息
     *
     * @param storeLocId 储位信息主键
     * @return 储位信息
     */
    public MdStockPosInfo selectMdStockPosInfoByStoreLocId(Long storeLocId);

    /**
     * 查询储位信息列表
     *
     * @param mdStockPosInfo 储位信息
     * @return 储位信息集合
     */
    public List<MdStockPosInfo> selectMdStockPosInfoList(MdStockPosInfo mdStockPosInfo);

    /**
     * 新增储位信息
     *
     * @param mdStockPosInfo 储位信息
     * @return 结果
     */
    public int insertMdStockPosInfo(MdStockPosInfo mdStockPosInfo);

    /**
     * 修改储位信息
     *
     * @param mdStockPosInfo 储位信息
     * @return 结果
     */
    public int updateMdStockPosInfo(MdStockPosInfo mdStockPosInfo);

    /**
     * 删除储位信息
     *
     * @param storeLocId 储位信息主键
     * @return 结果
     */
    public int deleteMdStockPosInfoByStoreLocId(Long storeLocId);

    /**
     * 批量删除储位信息
     *
     * @param storeLocIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMdStockPosInfoByStoreLocIds(Long[] storeLocIds);

    /**
     * 校验储位编号是否唯一
     *
     * @param storeLocNo 储位编号
     * @return 结果
     */
    public MdStockPosInfo checkStoreLocNoUnique(@Param("storeLocNo") String storeLocNo);

    /**
     * 查询储位下拉框
     *
     * @param mdStockPosInfo 储位
     * @return 储位集合
     */
    public List<Map<String, Object>> mdStockPosInfoOptions(MdStockPosInfo mdStockPosInfo);

    /**
     * 获取储位统计信息
     *
     * @return 统计信息
     */
    public Map<String, Double> getStockStatistics();

    /**
     * 获取货位利用率统计数据
     *
     * @return 结果
     */
    public List<MdStockPosInfo> getPosAvailability();

    /**
     * 获取储位利用数
     *
     * @return 结果
     */
    public Integer getUseStockTotal();

    /**
     * 获取储位总数
     *
     * @return 结果
     */
    public Integer getStockTotal();

    /**
     * 根据储位编号查询存放区信息
     *
     * @param storeLocNo 储位编号
     * @return 储位信息
     */
    public MdStockPosInfo selectMdStockPosInfoByStoreLocNo(String storeLocNo);

    /**
     * 查询当前最大id
     */
    public Long selectMaxId();
}
